iOS 18.0以降のiOSシミュレータで地図を表示すると真っ赤になってしまう問題
以前、「Xcode 16.0とiOS 18.0シミュレータの組み合わせでSafariViewControllerがフリーズしてしまう不具合を解消する」という記事で、Excluded Architectures
設定が原因でSFSafariViewController
やUIImagePickerController
が正常に動作しない問題について紹介した。
その後、Xcode 16.2での検証中に、Excluded Architectures
設定が有効な場合、地図表示機能(MapKit
)でも同様の問題が発生することが判明した。本記事では、この新たに発見された問題について解説する。
問題の概要
iOS 18.0以降のシミュレータ環境において、Excluded Architectures
設定が有効な場合、地図表示が赤くなってしまう現象が発生する。なお、実機ではこの問題は発生しない。
検証用サンプルコード
以下は、MapKit
を使用して皇居周辺を表示する最小限のサンプルコードである。このコードをiOS 18.0以降のシミュレータで実行した際に問題が再現する。
import SwiftUI
import MapKit
struct ContentView: View {
@State private var region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: 35.6844779, longitude: 139.7512224),
span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05)
)
var body: some View {
Map(coordinateRegion: $region)
}
}
#Preview {
ContentView()
}
検証結果
iPhone 16 Pro / iOS 18.0のiOSシミュレータにて前述のサンプルコードを実行した。以下の表は、Excluded Architectures
設定の有無による挙動の違いを示している。
Excluded Architectures設定があるとき | Excluded Architectures設定がないとき |
---|---|
この検証結果から、以下のことがわかった。
- Excluded Architectures設定がある場合、地図が真っ赤に表示される。
- Excluded Architectures設定がない場合、地図が正常に表示される。
まとめ
問題の整理
この問題は、以前の記事で紹介したSFSafariViewController
やUIImagePickerController
の不具合と同様に、Excluded Architectures
設定に起因していると考えられる。
SFSafariViewController
を表示すると真っ白になり、アプリがフリーズする問題UIImagePickerController
を表示すると、アプリがフリーズする問題MapKit
で地図が赤色で表示される問題
これらの問題は、2024年9月16日にリリースされたXcode 16.0およびiOS 18.0以降のシミュレータ環境で発生しており、現時点(2024年12月時点)でも修正されていない。この設定については可能な限り早期に除去した方が良いだろう。
解決策
Excluded Architectures
設定は、下図のようにプロジェクトのBuild Settingsの項目にある。この項目を削除することでこの現象は解決する。
しかし、前回の記事での述べた通り、アプリが依存しているサードパーティSDKがarm64に対応していない場合には問題が解決しない可能性がある。その場合は、SDK提供元にarm64対応を依頼する必要があるだろう。